home *** CD-ROM | disk | FTP | other *** search
- # include "ctlmod.h"
- # include "pipes.h"
- # include <sccs.h>
-
- SCCSID(@(#)pb_write.c 8.1 12/31/84)
-
- /*
- ** PB_WRITE -- Write pipe block
- **
- ** Writes the block specified by ppb to the pipe implied by
- ** ppb->pb_proc. Also handles broadcase messages.
- **
- ** Parameters:
- ** ppb -- a ptr to the pipe block to write.
- **
- ** Returns:
- ** none
- **
- ** Side Effects:
- ** none
- **
- ** Trace Flags:
- ** 12.10 - 12.15
- */
-
- pb_write(ppb)
- register pb_t *ppb;
- {
- register int i;
-
- # ifdef xCTR1
- if (tTf(12, 10))
- {
- lprintf("pb_write: ");
- pb_dump(ppb, TRUE);
- }
- # endif
-
- /* handle broadcast messages */
- if (ppb->pb_proc == PB_WILD)
- {
- /* write on all pipes marked as a broadcast pipe */
- for (i = 0; i < CM_MAXPROC; i++)
- {
- if ((Cm.cm_proc[i].pr_stat & PR_BCAST) != 0)
- pb_wphys(ppb, Cm.cm_proc[i].pr_file);
- }
- }
- else
- {
- /* normal message */
- i = ppb->pb_proc;
- # ifdef xCM_DEBUG
- if (i > CM_MAXPROC || i < 0)
- syserr("pb_write: proc %d", i);
- # endif
- # ifdef xCTR1
- if (tTf(12, 11))
- printf("pb_write: proc %d fd=%d\n", i, Cm.cm_proc[i].pr_file);
- # endif
- pb_wphys(ppb, Cm.cm_proc[i].pr_file);
- }
-
- /* determine the new input */
- if ((ppb->pb_stat & (PB_INFO|PB_EOF)) == PB_EOF)
- Cm.cm_input = Cm.cm_proc[ppb->pb_proc].pr_ninput;
-
- /* reset some exciting pointers */
- ppb->pb_xptr = ppb->pb_data;
- ppb->pb_nleft = PB_DBSIZE;
- ppb->pb_nused = 0;
- }
-